<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
    <title>ShellCheck: SC2091 – Remove surrounding `$()` to avoid executing output (or use `eval` if intentional).</title>
    <link rel="stylesheet" href="css/bootstrap.min.css" />
  </head>
  <body style="margin-left: auto; margin-right: auto; max-width: 800px">
    <h1>SC2091 – ShellCheck Wiki</h1>
    <a href="https://github.com/koalaman/shellcheck/wiki/SC2091">See this page on GitHub</a>
    <p style="display: none"><a href="index.html">Sitemap</a></p>
    <hr />
    <h2
id="remove-surrounding--to-avoid-executing-output-or-use-eval-if-intentional">Remove
surrounding <code>$()</code> to avoid executing output (or use
<code>eval</code> if intentional).</h2>
<h3 id="problematic-code">Problematic code:</h3>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="SC2091.html#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="va">$(</span><span class="fu">which</span> epstopdf<span class="va">)</span></span>
<span id="cb1-2"><a href="SC2091.html#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="cf">then</span></span>
<span id="cb1-3"><a href="SC2091.html#cb1-3" aria-hidden="true" tabindex="-1"></a>  <span class="bu">echo</span> <span class="st">&quot;Found epstopdf&quot;</span></span>
<span id="cb1-4"><a href="SC2091.html#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="cf">fi</span></span></code></pre></div>
<p>or</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="SC2091.html#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make_command()</span> <span class="kw">{</span></span>
<span id="cb2-2"><a href="SC2091.html#cb2-2" aria-hidden="true" tabindex="-1"></a>  <span class="bu">printf</span> <span class="st">&#39;cat header %q footer &gt; %q\n&#39;</span> <span class="st">&quot;</span><span class="va">$1</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$2</span><span class="st">&quot;</span> <span class="kw">|</span> <span class="fu">tee</span> log</span>
<span id="cb2-3"><a href="SC2091.html#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb2-4"><a href="SC2091.html#cb2-4" aria-hidden="true" tabindex="-1"></a><span class="va">$(</span><span class="ex">make_command</span> foo.html output/foo.html<span class="va">)</span></span></code></pre></div>
<h3 id="correct-code">Correct code:</h3>
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="SC2091.html#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> <span class="fu">which</span> epstopdf</span>
<span id="cb3-2"><a href="SC2091.html#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="cf">then</span></span>
<span id="cb3-3"><a href="SC2091.html#cb3-3" aria-hidden="true" tabindex="-1"></a>  <span class="bu">echo</span> <span class="st">&quot;Found epstopdf&quot;</span></span>
<span id="cb3-4"><a href="SC2091.html#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="cf">fi</span></span></code></pre></div>
<p>or</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="SC2091.html#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="fu">make_command()</span> <span class="kw">{</span></span>
<span id="cb4-2"><a href="SC2091.html#cb4-2" aria-hidden="true" tabindex="-1"></a>  <span class="bu">printf</span> <span class="st">&#39;cat header %q footer &gt; %q\n&#39;</span> <span class="st">&quot;</span><span class="va">$1</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$2</span><span class="st">&quot;</span> <span class="kw">|</span> <span class="fu">tee</span> log</span>
<span id="cb4-3"><a href="SC2091.html#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb4-4"><a href="SC2091.html#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="bu">eval</span> <span class="st">&quot;</span><span class="va">$(</span><span class="ex">make_command</span> foo.html output/foo.html<span class="va">)</span><span class="st">&quot;</span></span></code></pre></div>
<h3 id="rationale">Rationale:</h3>
<p>ShellCheck has detected that you have a command that just consists of
a command substitution. This often happens when you want to run a
command (possibly from a variable name), without realizing that
<code>$(..)</code> is for capturing and not for executing.</p>
<p>For example, if you have this shell function:</p>
<pre><code>sayhello() { echo &quot;hello world&quot;; }</code></pre>
<p>Then <code>$(sayhello)</code> will:</p>
<ol>
<li>Run <code>sayhello</code>, capturing "hello world"</li>
<li>Run <code>hello world</code>, resulting in
<code>bash: hello: command not found</code></li>
</ol>
<p>Meanwhile, just <code>sayhello</code> will:</p>
<ol>
<li>Run <code>sayhello</code>, outputting "hello world" to screen</li>
</ol>
<p>Note that this is equally true if the command is in a variable, e.g.
<code>x=sayhello; $($x)</code>.</p>
<p>If you <em>do</em> have a command that outputs a second command,
similar to how <code>ssh-agent</code> outputs <code>export</code>
commands to run, then you should do this via <code>eval</code>. This
way, quotes, pipes, redirections, semicolons, and other shell constructs
will work as expected. Note that this kind of design is best avoided
when possible, since correctly escaping all values can be difficult and
error prone.</p>
<h3 id="exceptions">Exceptions:</h3>
<p>None.</p>
<h3 id="related-resources">Related resources:</h3>
<ul>
<li>StackOverflow: <a
href="https://stackoverflow.com/questions/18611842/bash-function-command-not-found">Bash
Function -&gt; Command not found</a></li>
</ul>
    <hr />
    <p style='font-size: 80%'><a href="../index.html">ShellCheck</a> is a static analysis tool for shell scripts. This page is part of its documentation.</p>
  </body>
</html>


